<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>

    /*
     * 关于短路与
     */
    var a = "qwe";
    var b = "xyz";

    // a && b 一般用这个表达式的结果而没有关心它的值是什么，凭借想象力可能以为是 true or false
    // 但是我告诉你，这个表达式的结果并不是一个 boolean value
    // 隐式类型转换：将字符串转换成一个 boolean value
    // 所以字符串 a 就是 true 为真，b 也是 true 为真
    // 最终的输出不是 boolean value，而是直接返回 b，然后如果是 if 语法，则将 b 再进行隐式转换计算 true or false
    if(a && b){
        console.log('@')
    }

    // 返回的是 b 验证一下
    var t = a && b;
    console.log(t); // xyz

    /*
     * 什么是表达式？
     * 能返回值的语句就是表达式(函数返回值不算)
     * 用一个变量去接，能接到值的就是表达式
     */
    var a = 1;
    // Duplicate declaration 重复声明
    var b = 2;
    var c = a, b;
    // 同时定义多个变量 错误方式
    var d, e, f = 5;
    // 同时定义多个变量 正确方式
    var g = 1, h = 2, i = 3, j = 4;

    var x = 1;
    var x = 2;
    console.log(x);
    // Variable might not have been initialized 变量可能尚未初始化
    console.log(b);  // 2
    console.log(c);  // 1
    console.log(d);  // undefined
    console.log(e);  // undefined
    console.log(f);  // 5
    console.log(g);  // 1
    console.log(h);  // 2
    console.log(i);  // 3
    console.log(j);  // 4

    // 取第一个 a
    console.log("\n");
    var z = a, b, c, d;
    console.log(z)
    // 取最后那个 d
    var z = (a, b, c, d);
    console.log(z)
</script>
</body>
</html>
